//package com.wx.wxpush.job;
//
//import cn.hutool.extra.spring.SpringUtil;
//import com.wx.wxpush.entiy.Cron;
//import com.wx.wxpush.mapper.CornTaskMapper;
//import org.apache.commons.lang3.StringUtils;
//import org.mybatis.logging.Logger;
//import org.mybatis.logging.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Lazy;
//import org.springframework.scheduling.Trigger;
//import org.springframework.scheduling.TriggerContext;
//import org.springframework.scheduling.annotation.SchedulingConfigurer;
//import org.springframework.scheduling.config.ScheduledTaskRegistrar;
//import org.springframework.scheduling.support.CronTrigger;
//import org.springframework.stereotype.Component;
//
//import java.lang.reflect.InvocationTargetException;
//import java.lang.reflect.Method;
//import java.text.SimpleDateFormat;
//import java.util.Date;
//import java.util.List;
//
//@Lazy(value = false)
//@Component
//public class ScheduConfig implements SchedulingConfigurer {
//
//    protected static Logger logger = LoggerFactory.getLogger(ScheduConfig.class);
//    private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//
//    @Autowired
//    private CornTaskMapper cornTaskMapper;
//
//    @Override
//    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//        List<String> tasks = getAllScheduleTasks();
//       // logger.info("【定时任务启动】 启动任务数："+tasks.size()+"; time="+sdf.format(new Date()));
//
//        //校验数据
//
//
//        //通过校验的数据执行定时任务
//        int count = 0;
//        if(tasks.size()>0) {
//            for (int i = 0; i < tasks.size(); i++) {
//                try {
//                    taskRegistrar.addTriggerTask(getRunnable(tasks.get(i)), getTrigger(tasks.get(i)));
//                    count++;
//                } catch (Exception e) {
//                    logger.error("task start error:" + tasks.get(i).getClassName() + ";" + tasks.get(i).getMethodName() + ";" + e.getMessage());
//                }
//            }
//        }
//        logger.info("started task number="+count+"; time="+sdf.format(new Date()));
//    };
//
//    /**
//     * 获取要执行的所有任务
//     * @return
//     */
//    private List<String> getAllScheduleTasks() {
//        Cron example=new Cron();
//
//        return cornTaskMapper.selectAllTask();
//    }
//
//    /**
//     * 获取Runnable
//     *
//     * @param task
//     * @return
//     */
//    private Runnable getRunnable(ScheduConfig task){
//        return new Runnable() {
//            @Override
//            public void run() {
//                try {
//                    Object obj = SpringUtil.getBean(task.getClassName());
//                    Method method = obj.getClass().getMethod(task.getMethodName(),null);
//                    method.invoke(obj);
//                } catch (InvocationTargetException e) {
//                    logger.error("refect exception:"+task.getClassName()+";"+task.getMethodName()+";"+ e.getMessage());
//                } catch (Exception e) {
//                    logger.error(e.getMessage());
//                }
//            }
//        };
//    }
//
//    /**
//     * 获取Trigger
//     *
//     * @param task
//     * @return
//     */
//    private Trigger getTrigger(ScheduConfig task){
//        return new Trigger() {
//            @Override
//            public Date nextExecutionTime(TriggerContext triggerContext) {
//                //将Cron 0/1 * * * * ?
//                CronTrigger trigger = new CronTrigger(task.getCron());
//                Date nextExec = trigger.nextExecutionTime(triggerContext);
//                return nextExec;
//            }
//        };
//    }
//
//
//
//    /**
//     * 按每一条校验数据
//     *
//     * @param task
//     * @return
//     */
//    private String checkOneData(ScheduleTask task){
//        String result="ok";
//        Class cal= null;
//        try {
//            cal = Class.forName(task.getClassName());
//            Object obj =SpringUtil.getBean(cal);
//            Method method = obj.getClass().getMethod(task.getMethodName(),null);
//            String cron=task.getCron();
//            if(StringUtils.isBlank(cron)){
//                result="no found the cron:"+task.getTaskName();
//                logger.error(result);
//            }
//        } catch (ClassNotFoundException e) {
//            result="not found the class:"+task.getClassName()+ e.getMessage();
//            logger.error(result);
//        } catch (NoSuchMethodException e) {
//            result="not found the method:"+task.getClassName()+";"+task.getMethodName()+";"+ e.getMessage();
//            logger.error(result);
//        } catch (Exception e) {
//            logger.error(e.getMessage());
//        }
//        return result;
//    }
//}